package 剑指Offer._6170;

import java.util.Arrays;

/**
 * @author yzh
 * @version 1.0
 * @date 2021/11/24 11:36
 * 扑克牌中的顺子
 * 从若干副扑克牌中随机抽 5 张牌，判断是不是一个顺子，即这5张牌是不是连续的。
 * 2～10为数字本身，A为1，J为11，Q为12，K为13，而大、小王为 0 ，可以看成任意数字。A 不能视为 14。
 * 算法：数组 + 排序
 * 给出的数组是随机的，并不是排序好的，以为这是简单题，大意了
 * [0, 0, 1, 5, 2] 是顺子，表示 0 是万能的，给出的数组并不是排序好的
 * 将数组排序，并统计 0 的个数
 * 如果相邻的两个数相等，直接返回 false
 * 如果相邻的两个数不是顺子，就相减 +1，表示需要几个 0 来填充
 */
public class _61 {

    public boolean isStraight(int[] nums) {
        Arrays.sort(nums);
        int joker = 0, need = 0;
        for (int i = 0; i < 4; i++) {
            if (nums[i] == 0) ++joker;
            else {
                if (nums[i] == nums[i + 1]) return false;
                if (nums[i + 1] - nums[i] != 1) need += nums[i + 1] - nums[i] - 1;
            }
        }
        return joker >= need;
    }

}
